// src/router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/store/user'

const routes = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/Login.vue'),
    meta: { title: '登录' }
  },
  {
    path: '/register',
    name: 'Register',
    component: () => import('@/views/Register.vue'),
    meta: { title: '注册' }
  },
  {
    path: '/',
    name: 'Dashboard',
    component: () => import('@/views/Dashboard.vue'),
    meta: { title: '首页', requiresAuth: true } // 这个路由需要认证
  },
  // ...其他业务路由
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

const whiteList = ['/login', '/register'] // 免登录白名单

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  document.title = `${to.meta.title} - 自学考试管理系统`
  const userStore = useUserStore()

  if (userStore.isLoggedIn) {
    if (to.path === '/login') {
      // 如果已登录，访问登录页则重定向到首页
      next({ path: '/' })
    } else {
      // 如果用户信息不存在，则尝试获取
      if (!userStore.userInfo.id) {
          try {
              await userStore.fetchUserInfo()
              next()
          } catch(error) {
              // 获取用户信息失败，说明 token 失效，重置并跳转到登录页
              userStore.resetUser()
              next(`/login?redirect=${to.path}`)
          }
      } else {
          next()
      }
    }
  } else {
    // 未登录
    if (whiteList.includes(to.path)) {
      // 在免登录白名单中，直接放行
      next()
    } else {
      // 其他没有访问权限的页面将重定向到登录页
      next(`/login?redirect=${to.path}`)
    }
  }
})

export default router